import axios from 'axios';
import { API_CONFIG } from './config';

// 创建axios实例
export const apiClient = axios.create({
  baseURL: API_CONFIG.BASE_URL,
  timeout: API_CONFIG.TIMEOUT,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

// 请求拦截器
apiClient.interceptors.request.use(
  config => {
    // 启用请求日志
    if (API_CONFIG.ENABLE_LOGGING) {
      console.log('请求:', config.url, config.params || config.data);
    }
    
    // 可以在这里添加认证信息等
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
apiClient.interceptors.response.use(
  response => {
    // 启用请求日志
    if (API_CONFIG.ENABLE_LOGGING) {
      console.log('响应:', response.config.url, response.data);
    }
    
    return response.data;
  },
  error => {
    if (error.response) {
      // 处理错误响应
      console.error('API错误:', error.response.status, error.response.data);
    } else if (error.request) {
      // 请求发送但没有收到响应
      console.error('网络错误:', error.request);
    } else {
      // 请求设置时发生错误
      console.error('请求错误:', error.message);
    }
    
    // 启用请求重试
    if (API_CONFIG.ENABLE_RETRY && !error.config.__retryCount) {
      error.config.__retryCount = 0;
      return retryRequest(error);
    }
    
    return Promise.reject(error);
  }
);

// 重试请求
function retryRequest(error) {
  const config = error.config;
  config.__retryCount = config.__retryCount || 0;
  
  if (config.__retryCount >= API_CONFIG.MAX_RETRY_COUNT) {
    return Promise.reject(error);
  }
  
  config.__retryCount += 1;
  
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`重试请求 (${config.__retryCount}/${API_CONFIG.MAX_RETRY_COUNT}): ${config.url}`);
      resolve(axios(config));
    }, API_CONFIG.RETRY_DELAY);
  });
} 